import Vue from 'vue'
import VueRouter from 'vue-router'
import routes from './routes'
// import store from '@/project/common/store'
// import FullLoading from '@/components/full-loading' //全局加载中页面

// 保存原来的push函数
const routerPush = VueRouter.prototype.push
// 重写push函数
VueRouter.prototype.push = function push(option) {
  // !!!!!!!!!!!!!!!!!!!!!!!!!!! 注意 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
  // 给每个链接 添加必要参数
  // if (!Object.prototype.hasOwnProperty.call(option, 'query')) {
  //   option.query = {}
  // }
  // if (!Object.prototype.hasOwnProperty.call(option.query, 'uniqid')) {
  //   option.query.uniqid = store.state.app.uniqid
  // }
  // // 后端要给每个页面加mine
  // if (!Object.prototype.hasOwnProperty.call(option.query, 'mine')) {
  //   option.query.mine = store.state.app.mine
  // }

  // 调用原来的push函数
  return routerPush.call(this, option)
}

Vue.use(VueRouter)

class Router {
  static instance
  static option = {
    mode: 'history',
    base: '/',
    routes
  }

  static setOption(option) {
    if (option.routes && option.routes.length) {
      Router.option.routes = [...Router.option.routes, ...option.routes]
    }
    if (option.mode) {
      Router.option.mode = option.mode
    }
    if (option.base) {
      Router.option.base = option.base
    }
  }

  static getInstance() {
    if (!this.instance) {
      Router.instance = new Router()
    }
    return Router.instance
  }

  // 封装push
  static push(option) {
    Router.instance.push(option)
  }

  constructor() {
    return this.init()
  }

  init() {
    const router = new VueRouter(Router.option)
    router.beforeEach((to, from, next) => {
      // 路由跳转改变title
      if (typeof to.meta.title !== 'undefined') {
        document.title = to.meta.title
      }

      // 前往404则无需判断
      if (to.name === '_404') {
        next()
      }
      // // 链接中有uid，更新store中的id
      // if (Object.prototype.hasOwnProperty.call(to.query, 'uniqid')) {
      //   store.state.app.uniqid = to.query.uniqid
      // }

      // 链接中有mine，更新store中的mine
      // if (Object.prototype.hasOwnProperty.call(to.query, 'mine')) {
      //   store.state.app.mine = to.query.mine
      // }

      // // 没有ui就跳转404
      // if (!Object.prototype.hasOwnProperty.call(to.query, 'uniqid')) {
      //   next({
      //     name: '_404'
      //   })
      //   return
      // }
      next()
    })
    return router
  }
}

export default Router
